<template>
    <div>
      <nav-header ref="navHeader"></nav-header>
      <nav-bread>
        <span>Address</span>
      </nav-bread>
      <div class="checkout-page">
        <svg style="position: absolute; width: 0; height: 0; overflow: hidden;" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
          <defs>
            <symbol id="icon-add" viewBox="0 0 31 32">
              <title>add</title>
              <path class="path1" d="M30.745 15.152h-14.382v-14.596c0-0.308-0.243-0.557-0.543-0.557s-0.543 0.249-0.543 0.557v14.596h-14.665c-0.3 0-0.543 0.249-0.543 0.557s0.243 0.557 0.543 0.557h14.665v15.177c0 0.307 0.243 0.557 0.543 0.557s0.543-0.249 0.543-0.557v-15.177h14.382c0.3 0 0.543-0.249 0.543-0.557s-0.243-0.557-0.543-0.557z"></path>
            </symbol>
            <symbol id="icon-ok" viewBox="0 0 32 32">
              <title>ok</title>
              <path class="path1" d="M14.084 20.656l-7.845-9.282c-1.288-1.482-3.534-1.639-5.016-0.351s-1.639 3.534-0.351 5.016l10.697 12.306c1.451 1.669 4.057 1.623 5.448-0.096l18.168-22.456c1.235-1.527 0.999-3.765-0.528-5.001s-3.765-0.999-5.001 0.528l-15.573 19.337z"></path>
            </symbol>
            <symbol id="icon-edit" viewBox="0 0 32 32">
              <title>edit</title>
              <path class="path1" d="M28.287 8.51l-4.805-4.806 0.831-0.831c0.472-0.472 1.086-0.777 1.564-0.777 0.248 0 0.452 0.082 0.622 0.253l3.143 3.144c0.539 0.54 0.133 1.529-0.524 2.186l-0.831 0.831zM26.805 9.992l-1.138 1.138-4.805-4.806 1.138-1.138 4.805 4.806zM24.186 12.612l-14.758 14.762-4.805-4.806 14.758-14.762 4.805 4.806zM7.379 28.288l-4.892 1.224 1.223-4.894 3.669 3.67zM31.123 4.011l-3.143-3.144c-0.567-0.567-1.294-0.867-2.103-0.867-1.036 0-2.174 0.52-3.045 1.391l-20.429 20.436c-0.135 0.134-0.23 0.302-0.276 0.487l-2.095 8.385c-0.089 0.355 0.017 0.736 0.276 0.995 0.198 0.198 0.461 0.307 0.741 0.307 0.085 0 0.171-0.010 0.254-0.031l8.381-2.096c0.185-0.047 0.354-0.142 0.487-0.276l20.43-20.436c1.409-1.41 2.042-3.632 0.524-5.15v0z"></path>
            </symbol>
            <symbol id="icon-del" viewBox="0 0 32 32">
              <title>delete</title>
              <path class="path1" d="M11.355 4.129v-2.065h9.29v2.065h-9.29zM6.194 29.935v-23.742h19.613v23.742h-19.613zM30.968 4.129h-8.258v-3.097c0-0.569-0.463-1.032-1.032-1.032h-11.355c-0.569 0-1.032 0.463-1.032 1.032v3.097h-8.258c-0.569 0-1.032 0.463-1.032 1.032s0.463 1.032 1.032 1.032h3.097v24.774c0 0.569 0.463 1.032 1.032 1.032h21.677c0.569 0 1.032-0.463 1.032-1.032v-24.774h3.097c0.569 0 1.032-0.463 1.032-1.032s-0.463-1.032-1.032-1.032v0z"></path>
              <path class="path2" d="M10.323 9.806c-0.569 0-1.032 0.463-1.032 1.032v14.452c0 0.569 0.463 1.032 1.032 1.032s1.032-0.463 1.032-1.032v-14.452c0-0.569-0.463-1.032-1.032-1.032z"></path>
              <path class="path3" d="M16 9.806c-0.569 0-1.032 0.463-1.032 1.032v14.452c0 0.569 0.463 1.032 1.032 1.032s1.032-0.463 1.032-1.032v-14.452c0-0.569-0.463-1.032-1.032-1.032z"></path>
              <path class="path4" d="M21.677 9.806c-0.569 0-1.032 0.463-1.032 1.032v14.452c0 0.569 0.463 1.032 1.032 1.032s1.032-0.463 1.032-1.032v-14.452c0-0.569-0.463-1.032-1.032-1.032z"></path>
            </symbol>
            <symbol id="icon-clock" viewBox="0 0 32 32">
              <title>clock</title>
              <path class="path1" d="M29.333 16c0-7.364-5.97-13.333-13.333-13.333s-13.333 5.97-13.333 13.333c0 7.364 5.97 13.333 13.333 13.333s13.333-5.97 13.333-13.333v0 0 0 0 0 0zM0 16c0-8.837 7.163-16 16-16s16 7.163 16 16c0 8.837-7.163 16-16 16s-16-7.163-16-16zM14.667 14.667v1.333h2.667v-10.667h-2.667v9.333zM24 18.667h1.333v-2.667h-10.667v2.667h9.333z"></path>
            </symbol>
            <symbol id="icon-question" viewBox="0 0 32 32">
              <title>question</title>
              <path class="path1" d="M16 2.56c7.411 0 13.44 6.029 13.44 13.44s-6.029 13.44-13.44 13.44c-7.411 0-13.44-6.029-13.44-13.44s6.029-13.44 13.44-13.44zM16 0c-8.822 0-16 7.178-16 16s7.178 16 16 16c8.822 0 16-7.178 16-16s-7.178-16-16-16z"></path>
              <path class="path2" d="M16 22.080c-1.059 0-1.92 0.861-1.92 1.92s0.861 1.92 1.92 1.92c1.059 0 1.92-0.861 1.92-1.92s-0.861-1.92-1.92-1.92z"></path>
              <path class="path3" d="M12.16 12.48c0.706 0 1.28-0.574 1.28-1.28 0-1.412 1.148-2.56 2.56-2.56s2.56 1.148 2.56 2.56c0 1.412-1.148 2.56-2.56 2.56-0.706 0-1.28 0.574-1.28 1.28v3.84c0 0.706 0.574 1.28 1.28 1.28s1.28-0.574 1.28-1.28v-2.723c2.224-0.575 3.84-2.616 3.84-4.957 0-2.823-2.297-5.12-5.12-5.12s-5.12 2.297-5.12 5.12c0 0.706 0.574 1.28 1.28 1.28z"></path>
            </symbol>
          </defs>
        </svg>
        <div class="container">
          <div class="checkout-addr">
            <div class="page-title-normal">
              <h2 class="page-title-h2"><span>check out</span></h2>
            </div>
            <!-- process step -->
            <div class="check-step">
              <ul>
                <li class="cur"><span>Confirm</span> address</li>
                <li><span>View your</span> order</li>
                <li><span>Make</span> payment</li>
                <li><span>Order</span> confirmation</li>
              </ul>
            </div>

            <!-- address list -->
            <div class="page-title-normal checkout-title">
              <h2><span>Shipping address</span></h2>
            </div>
            <div class="addr-list-wrap">
              <div class="addr-list">
                <ul>
                  <li
                    v-for="item of addressListFilter"
                    :key="item.addressId"
                    :class="{'check': item.addressId==checkedId}"
                    @click="checkedId = item.addressId">

                    <dl>
                      <dt>{{item.userName}}</dt>
                      <dd class="address">{{item.streetName}}</dd>
                      <dd class="tel">{{item.tel}}</dd>
                    </dl>

                    <div class="addr-opration addr-del" @click="deleteAddr(item.addressId)">
                      <a href="javascript:;" class="addr-del-btn">
                        <svg class="icon icon-del"><use xlink:href="#icon-del"></use></svg>
                      </a>
                    </div>

                    <div
                      class="addr-opration addr-set-default"
                      v-show="!item.isDefault"
                      @click="setDefault(item.addressId)">
                      <a href="javascript:;" class="addr-set-default-btn"><i>Set default</i></a>
                    </div>

                    <div class="addr-opration addr-default" v-show="item.isDefault">Default address</div>
                  </li>
                  <li class="addr-new" @click="dialogVisibleAdd = true">
                    <div class="add-new-inner">
                      <i class="icon-add">
                        <svg class="icon icon-add"><use xlink:href="#icon-add"></use></svg>
                      </i>
                      <p>Add new address</p>
                    </div>
                  </li>
                </ul>
              </div>

              <el-dialog
                title="删除地址"
                :visible.sync="dialogVisible"
                width="30%"
                center
                :show-close="false">
                <span>
                  <i class="el-icon-warning-outline"></i>
                  &nbsp;{{delAddrMsg}}
                </span>
                <span slot="footer" class="dialog-footer">
                  <el-button @click="cancelDel">取消</el-button>
                  <el-button type="danger" @click="sureDel">确定删除</el-button>
                </span>
              </el-dialog>

              <el-dialog
                title="新增地址"
                :visible.sync="hasAddr"
                width="50%"
                :show-close="false"
                center>
                <el-form :model="addrForm" :rules="addrRules" ref="addrForm" label-width="100px">
                  <el-form-item label="收件人姓名" prop="userName">
                    <el-input v-model="addrForm.userName"></el-input>
                  </el-form-item>
                  <el-form-item label="收货地址" prop="streetName">
                    <el-input v-model="addrForm.streetName"></el-input>
                  </el-form-item>
                  <el-form-item label="联系电话" prop="tel">
                    <el-input v-model="addrForm.tel"></el-input>
                  </el-form-item>
                  <el-form-item label="邮政编码" prop="postCode">
                    <el-input v-model="addrForm.postCode"></el-input>
                  </el-form-item>
                  <el-form-item label="设为默认" prop="delivery">
                    <el-switch v-model="addrForm.isDefault"></el-switch>
                  </el-form-item>
                </el-form>
                <span slot="footer" class="dialog-footer">
                  <el-button @click="dialogVisibleAdd = false">取消</el-button>
                  <el-button @click="resetForm('addrForm')">重置</el-button>
                  <el-button type="danger" @click="sureAdd('addrForm')">新增</el-button>
                </span>
              </el-dialog>

              <div class="shipping-addr-more">
                <a class="addr-more-btn up-down-btn" href="javascript:;" :class="{'open': limited!=3}" @click="expand">
                  more
                  <i class="i-up-down">
                    <i class="i-up-down-l"></i>
                    <i class="i-up-down-r"></i>
                  </i>
                </a>
              </div>
            </div>

            <!-- shipping method-->
            <div class="page-title-normal checkout-title">
              <h2><span>Shipping method</span></h2>
            </div>
            <div class="shipping-method-wrap">
              <div class="shipping-method">
                <ul>
                  <li class="check">
                    <div class="name">Standard shipping</div>
                    <div class="price">Free</div>
                    <div class="shipping-tips">
                      <p>Once shipped，Order should arrive in the destination in 1-7 business days</p>
                    </div>
                  </li>
                </ul>
              </div>
            </div>
            <div class="next-btn-wrap">
              <router-link
                class="btn btn--m btn--red"
                :to="{path:'orderConfirm',query:{'addressId':checkedId}}">Next</router-link>
            </div>
          </div>
        </div>
      </div>
      <nav-footer></nav-footer>
    </div>
</template>
<style>
</style>
<script>
  import NavHeader from '@/components/NavHeader.vue'
  import NavFooter from '@/components/NavFooter.vue'
  import NavBread from '@/components/NavBread.vue'
  import axios from 'axios'
  export default{
      inject:['pageFresh'],
      data(){
          return{
            limited: 3, // 显示记录数
            addressList: [], //地址列表
            isLogin: false, // 登陆状态
            checkedId: '', // 选择地址id
            delId: '', // 删除地址id
            dialogVisible: false, // 弹框显示
            dialogVisibleAdd: false, // 新增地址弹框显示
            delAddrMsg: '确定删除该地址？', // 弹框内容
            // 地址表单
            addrForm: {
              userName: '',
              streetName: '',
              postCode: '',
              tel:'',
              isDefault:false
            },
            // 地址表单校验
            addrRules: {
              userName: [
                { required: true, message: '请输入收件人姓名', trigger: 'blur' },
                { min: 1, max: 8, message: '长度在 3 到 5 个字符', trigger: 'blur' }
              ],
              streetName: [
                { required: true, message: '请输入收货地址', trigger: 'blur' },
              ],
              tel: [
                { required: true, message: '请输入联系电话', trigger: 'blur' }
                // { validator: checkTel, message: '请输入正确的联系方式', trigger: 'blur' }
              ]
            }
          }
      },
      mounted () {
        this.getAddressList()
      },
      computed: {
        addressListFilter () {
          return this.addressList.slice(0,this.limited)
        },
        hasAddr () {
          return !(this.addressList.length > 0) || this.dialogVisibleAdd
        }
      },
      methods: {
        // 获取列表数据
        getAddressList () {
          axios.get('/users/getAddressList').then(res => {
            if (res.data.status == '0') {
              this.addressList = res.data.result
              // 过滤出默认地址
              this.addressList.map(item => {
                if (item.isDefault) {
                  this.checkedId = item.addressId
                }
              })
              this.isLogin = true
            } else {
              if (res.data.result == '当前未登录') {
                this.isLogin = false
              }
            }
          })
        },
        // 图标显示控制
        expand () {
          if (this.limited == 3) {
            this.limited = this .addressList.lenght
          } else {
            this.limited = 3
          }
        },
        // 设置默认地址
        setDefault (addressId) {
          axios.post('/users/setDefaultAddress',{addressId}).then(res => {
            if (res.data.status == '0') {
              this.getAddressList()// 设置成功，刷新页面
              this.$message({
                message: "默认地址设置成功",
                type: 'success'
              })
            }
          })
        },
        // 删除地址
        deleteAddr (addressId) {
          this.delId = addressId
          this.dialogVisible = true
        },
        // 取消删除
        cancelDel () {
          this.delId = ''
          this.dialogVisible = false
          this.$message("取消地址删除")
        },
        // 确认删除
        sureDel () {
          axios.post('/users/deleteAddr',{addressId: this.delId}).then(res => {
            if (res.data.status = '0') {
              this.$message({
                message: "删除地址成功",
                type: 'success'
              })
            } else {
              this.$message.error('删除地址失败')
            }
            this.dialogVisible = false
            this.getAddressList()
          })
        },
        // 校验联系方式
        // checkTel (rule, value, callback) {
        //   if (/^(\(\d{3,4}-)|\d{3.4}-)?\d{7,8}$/.test(value) || 
        //       /^(13[0-9]|14[5|7]|15[0|1|2|3|4|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}$/.test(value)) {
        //     callback();
        //   } else {
        //     callback(new Error('请输入正确的联系方式'));
        //   }
        // },
        sureAdd (formName) {
          this.$refs[formName].validate((valid) => {
            if (valid) { // 表单验证通过
              axios.post('/users/addAddr',{addrForm: this.addrForm}).then(res => {
                if (res.data.status == '0') {
                  this.$message({
                    message: "新增地址成功",
                    type: 'success'
                  })
                  this.resetForm(formName)
                } else {
                  this.$message.error('新增地址失败')
                }
                this.getAddressList()
              })
            } else {
              return false
            }
            this.dialogVisibleAdd = false
          })
        },
        resetForm (formName) {
          this.$refs[formName].resetFields()
        }
      },
      components: {
        NavHeader,
        NavFooter,
        NavBread
      }
  }
</script>
